/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.pruebas;

import es.uco.gesthora.business.Grupo;
import es.uco.gesthora.business.Horario;
import es.uco.gesthora.business.SolicitudGrupo;
import es.uco.gesthora.business.gestorRutas.GestorRutas;
import es.uco.gesthora.data.DAO.DAOAlumno;
import es.uco.gesthora.data.DAO.DAOAsignatura;
import es.uco.gesthora.data.DAO.DAOGrupo;
import es.uco.gesthora.data.gestorBaseDatos.ConexionBD;
import es.uco.gesthora.interfaz.AlumnoBean;
import es.uco.gesthora.interfaz.UsuarioBean;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Vector;

public class PruebaAlgoritmo {

    int numAsignaturas = 10;
    int numAlumnos = 100;
    int idEspecialidad = 10;
    int idCurso = 1;
    int idProfesor = 28;
    int numGrupos = 2;
    int idAula = 1;
    int numPlazas = 50;

    public void iniciarPrueba() throws InstantiationException, SQLException {
        String path = GestorRutas.getInstance().getWebInfPath();
        ConexionBD cbd = new ConexionBD(path, "BaseDatos.properties");
        cbd.doUpdate("DELETE FROM solicitudGrupos WHERE true");
        //cbd.doUpdate("DELETE FROM gruposHorarios WHERE true");
        Horario horario = Horario.getInstance();
        int aux=0;
        SolicitudGrupo solicitudGrupo = SolicitudGrupo.getInstance();
        //iniciarBD();
        int prioridad;
        //unir grupo con horario
     /*   for (int i = 95; i < 114; i++) {
          /* for (int e = 0; e < 3; e++) {
                idHorario = (int) (Math.random() * (72 - 12)) + 12;
                horario.insertar(i, idHorario);
            }//
            horario.insertar(i, idHorario);
            idHorario++;
            
       }*/

        for ( int i =636; i < 736; i++){
                    aux = 95;
            for(int e = 0; e < 8 ; e++){
                prioridad = (int) (Math.random() * (3 - 1)) + 1;
                solicitudGrupo.insertar(aux, i, prioridad);
                aux = aux + 2;
            }
        }
    }

    public void iniciarBD() throws InstantiationException, SQLException {

        /*
         * VACIADO DE BD
         */

        String path = GestorRutas.getInstance().getWebInfPath();
        ConexionBD cbd = new ConexionBD(path, "BaseDatos.properties");
        cbd.doUpdate("DELETE FROM usuarios WHERE rol = 'alumno'");
        cbd.doUpdate("DELETE FROM asignaturas WHERE true");
        cbd.doUpdate("DELETE FROM grupos WHERE true");


        /* 
         * CREACION DE ALUMNOS
         * Usuario: alumnoX
         * Password: alumno
         * 
         */


        for (int i = 0; i < numAlumnos; i++) {
            insertarAlumno("alumno" + i, "Nombre " + i, "Apellido " + i, "Apellido " + i, "00000000Z", "alumno@alumno.com", idEspecialidad);
        }

        /*
         * CREACION DE ASIGNATURAS
         */

        for (int i = 0; i < numAsignaturas; i++) {
            insertarAsignatura("Asignatura " + i, idCurso, idEspecialidad + "");
        }



        /*
         * CREACION GRUPOS
         */

        Vector asignaturas = new Vector();

        asignaturas = cbd.doSelect("SELECT idAsignatura FROM asignaturas");
        Hashtable h;
        int idAsignatura;

        for (int i = 0; i < asignaturas.size(); i++) {

            h = (Hashtable) asignaturas.get(i);
            idAsignatura = (Integer) h.get("idAsignatura");

            insertarGrupo(idAsignatura, numGrupos, idProfesor, idAula, numPlazas);

        }


    }

    public void insertarAsignatura(String nombreAsignatura, int idCurso, String idEspecialidad) {

        DAOAsignatura.getInstance().anadir(nombreAsignatura, idCurso);
        DAOAsignatura.getInstance().anadir(nombreAsignatura, idEspecialidad);

    }

    /*
     * Nos saltamos las comprobaciones de DNI, usuario, etc. con esta funcion, si se usa la de la clase Alumno falla
     */
    public void insertarAlumno(String nombreUsuario, String nombre, String apellido1, String apellido2, String dni, String email, int especialidad) {

        AlumnoBean infoAlumno = new AlumnoBean();
        UsuarioBean infoUsuario = new UsuarioBean();

        infoAlumno.setNombreUsuario(nombreUsuario);
        infoAlumno.setNombre(nombre);
        infoAlumno.setApellido1(apellido1);
        infoAlumno.setApellido2(apellido2);
        infoAlumno.setDni(dni);
        infoAlumno.setEmail(email);
        infoAlumno.setEspecialidad(especialidad);
        infoUsuario.setUsuario(infoAlumno.getNombreUsuario());
        infoUsuario.setPassword("alumno");
        infoUsuario.setEmail(email);
        infoUsuario.setRol("alumno");
        infoUsuario.setCodActivacion("0");

        DAOAlumno.getInstance().anadir(infoUsuario);
        DAOAlumno.getInstance().anadir(infoAlumno);

    }

    public void insertarGrupo(int idAsignatura, int numeroGrupo, int idProfesor, int idAula, int numeroPlazas) throws InstantiationException, SQLException {

        String path = GestorRutas.getInstance().getWebInfPath();
        ConexionBD cbd = new ConexionBD(path, "BaseDatos.properties");

        DAOGrupo grupo = DAOGrupo.getInstance();
        Hashtable HGrupo = new Hashtable();

        for (int i = 0; i < numeroGrupo; i++) {
            grupo.anadir(idAsignatura, i + 1);
            HGrupo = (Hashtable) grupo.seleccionar(idAsignatura, i + 1).get(0);
            grupo.modificar(Integer.parseInt(HGrupo.get("idGrupo").toString()), idAsignatura, idProfesor, idAula, numeroPlazas, i + 1);
        }

    }
}
